package pe.bf.extranet.web;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import pe.bf.domain.bean.Contacto;
import pe.bf.domain.bean.Departamento;
import pe.bf.domain.bean.Distrito;
import pe.bf.domain.bean.Empresa;
import pe.bf.domain.bean.Perfil;
import pe.bf.domain.bean.Provincia;
import pe.bf.domain.bean.Usuario;
import pe.bf.extranet.cliente.ClienteWS;

/**
 * Servlet implementation class servlet
 */
//@WebServlet("/empresaServlet")
public class EmpresaServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public EmpresaServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    
    public void mantenerParametros(HttpServletRequest request){
		String txtId=request.getParameter("txtId");
		String txtRuc=request.getParameter("txtRuc");
		String txtNombre=request.getParameter("txtNombre");
		String txtRubro=request.getParameter("txtRubro");
		String txtDepartamento=request.getParameter("txtDepartamento");
		String txtProvincia=request.getParameter("txtProvincia");
		String txtDistrito=request.getParameter("txtDistrito");
		String txtDireccion=request.getParameter("txtDireccion");
		String txtTelefono=request.getParameter("txtTelefono");
		String txtHorario=request.getParameter("txtHorario");
		String txtDias=request.getParameter("txtDias");
		String accion=request.getParameter("accion");
		
		request.setAttribute("txtId", txtId);
		request.setAttribute("txtRuc", txtRuc);
		request.setAttribute("txtNombre", txtNombre);
		request.setAttribute("txtRubro", txtRubro);
		request.setAttribute("txtDepartamento", txtDepartamento);
		request.setAttribute("txtProvincia", txtProvincia);
		request.setAttribute("txtDistrito", txtDistrito);
		request.setAttribute("txtDireccion", txtDireccion);
		request.setAttribute("txtTelefono", txtTelefono);
		request.setAttribute("txtHorario", txtHorario);
		request.setAttribute("txtDias", txtDias);
		request.setAttribute("accion", accion);
		

    }
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		 
		doPost(request, response);

	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
		Usuario usuario=(Usuario)request.getSession().getAttribute("usuarioBean");
		if(usuario==null){
            request.getRequestDispatcher("servlet").forward(request, response); 
            return;
		}
		
 
		Object accion=request.getParameter("accion");
//		cargarListaDepartamentos(request);
		if(accion!=null){
			String txtId=request.getParameter("txtId");
			String txtRuc=request.getParameter("txtRuc");
			String txtNombre=request.getParameter("txtNombre");
			String txtRubro=request.getParameter("txtRubro");
			String txtDepartamento=request.getParameter("txtDepartamento");
			String txtProvincia=request.getParameter("txtProvincia");
			String txtDistrito=request.getParameter("txtDistrito");
			String txtDireccion=request.getParameter("txtDireccion");
			String txtTelefono=request.getParameter("txtTelefono");
			String txtHorario=request.getParameter("txtHorario");
			String txtDias=request.getParameter("txtDias");
			
			String[] txtContatoNombres=request.getParameterValues("nombres");
			String[] txtContatoCargo=request.getParameterValues("cargos");
			String[] txtContatoTel1=request.getParameterValues("telefonos");
			String[] txtContatoEmail=request.getParameterValues("emails");
			
			String[] empresasSelect = request.getParameterValues("empresaSeleccionado");
		
			String registroEditar = "";
			
			if(empresasSelect!=null)
			for (String id : empresasSelect) {
				if (id.length() > 0) {
					registroEditar = id;
				}
			}
			
			
			Empresa empresa =new Empresa();
			empresa.setRuc(txtRuc);
			empresa.setNombres(txtNombre);
			empresa.setRubro(txtRubro);
//			empresa.setDistrito(new Distrito(Long.valueOf(txtDistrito)));
			empresa.setDireccion(txtDireccion);
			empresa.setTelefono1(txtTelefono);
			empresa.setHorario(txtHorario);
			empresa.setDia_validar(txtDias);
			
			System.out.println(txtContatoNombres);
			
			if (txtContatoNombres != null) {
				
				List<Contacto> lstContactos = new ArrayList<Contacto>();

				for (int i = 0; i < txtContatoNombres.length; i++) {
					Contacto contacto = new Contacto();
					contacto.setNombres(txtContatoNombres[i]);
					contacto.setCargo(txtContatoCargo[i]);
					contacto.setTelefono(txtContatoTel1[i]);
					contacto.setEmail(txtContatoEmail[i]);
					lstContactos.add(contacto);
				}
				
				
				Contacto[] array = new Contacto[lstContactos.size()];
				empresa.setContactos(lstContactos.toArray(array));

			}
			
			if(accion.equals("carga_provincia")){
				mantenerParametros(request);
				cargarListaProvincias(request,request.getParameter("txtDepartamento"));
			}else if(accion.equals("carga_distrito")){
				mantenerParametros(request);
				cargarListaDistritos(request,request.getParameter("txtProvincia"));
			}else if(accion.equals("editar_empresa")){
//				mantenerParametros(request);
				
				String txtIdEmpresa= request.getParameter("txtIdEmpresaString");				
				empresa.setIdEmpresa(usuario.getEmpresa().getIdEmpresa());
				
				if(txtIdEmpresa!=null && !txtIdEmpresa.trim().equals("")){
					empresa.setIdEmpresa(new Long(txtIdEmpresa));
				}
				
				ClienteWS.actualizarEmpresa(empresa);
				ClienteWS.crearContactos(empresa.getIdEmpresa(),empresa.getContactos());
			}else if(accion.equals("crear_empresa")){
				mantenerParametros(request);
			}else if(accion.equals("grabar_empresa")){
				Long idEmpresa = ClienteWS.crearEmpresa(empresa);
				if(idEmpresa!=-1){
					ClienteWS.crearContactos(idEmpresa,empresa.getContactos());
					request.setAttribute("accion","usuarioDeEmpresa");
					List<Empresa> lista=ClienteWS.listarEmpresa(); 
					request.getSession().setAttribute("empresaSession", lista.get(lista.size()-1).getIdEmpresa());
					request.setAttribute("activeNroSobre", "true");
					request.setAttribute("idEmpresa", idEmpresa);	
					request.getRequestDispatcher("usuarioServlet").forward(request, response);
					return;
				}
				
			}else if(accion.equals("baja_empresa")){
				 Empresa emp=new Empresa();
				 String[] empresaSeleccionado=request.getParameterValues("empresaSeleccionado");
				 for(String id:empresaSeleccionado){
					 		if(id.length()>0){
					 			Long idEmpresa=Long.valueOf(id);
					 			emp.setIdEmpresa(idEmpresa);
					 			ClienteWS.bajaEmpresa(emp);	
					 		}
					 		 	 
				 }
				 
				 request.setAttribute("mensaje", "Usuario dado de baja exitosamente.");
			}else if(accion.equals("editar_empresa_buscar")){
				Empresa emp = new Empresa();
				emp.setIdEmpresa(new Long(registroEditar));
				emp = ClienteWS.buscarEmpresa(emp);
				List<Contacto> contactos=ClienteWS.listarContactosEmpresas(emp);
				
				int index = 3;
				if (contactos != null && !contactos.isEmpty()) {
					index = index - contactos.size();
				}else{
					contactos = new ArrayList<Contacto>();
				}

				for (int i = 0; i < index; i++) {
					Contacto contacto = new Contacto();
					contacto.setCargo("");
					contacto.setEmail("");
					contacto.setNombres("");
					contacto.setTelefono("");
					contactos.add(contacto);
				}
				
				Contacto[] array = new Contacto[contactos.size()];
				emp.setContactos(contactos.toArray(array));
				
				request.setAttribute("empresaBean", emp);
			}
			
			if(usuario.getPerfilesString().contains("5-")){
				cargarListaEmpresa(request);
			}else{
				Empresa emp = usuario.getEmpresa();
				emp = ClienteWS.buscarEmpresa(emp);
				List<Contacto> contactos=ClienteWS.listarContactosEmpresas(emp);
				
				int index = 3;
				if (contactos != null && !contactos.isEmpty()) {
					index = index - contactos.size();
				}else{
					contactos = new ArrayList<Contacto>();
				}

				for (int i = 0; i < index; i++) {
					Contacto contacto = new Contacto();
					contacto.setCargo("");
					contacto.setEmail("");
					contacto.setNombres("");
					contacto.setTelefono("");
					contactos.add(contacto);
				}
				
				Contacto[] array = new Contacto[contactos.size()];
				emp.setContactos(contactos.toArray(array));
				request.setAttribute("empresaBean", emp);
			}
			
			request.getRequestDispatcher("empresa.jsp").forward(request, response);
			return;
		}else{
			
			
			
			if(usuario.getPerfilesString().contains("5-")){
				cargarListaEmpresa(request);
				
			}else{
				Empresa emp = usuario.getEmpresa();
				emp = ClienteWS.buscarEmpresa(emp);
				List<Contacto> contactos=ClienteWS.listarContactosEmpresas(emp);
				Contacto[] array = new Contacto[contactos.size()];
				emp.setContactos(contactos.toArray(array));
				request.setAttribute("empresaBean", emp);
			}
			
			request.getRequestDispatcher("empresa.jsp").forward(request, response);
			return;	
		}
		 

	}

	private void cargarListaEmpresa(HttpServletRequest request) {
		List<Empresa> empresas=ClienteWS.listarEmpresa();
		request.setAttribute("listaEmpresas",empresas);
	}
	
	
	private void cargarListaDepartamentos(HttpServletRequest request ) {
		List<Departamento> empresas=ClienteWS.findDepartamentos();
		request.setAttribute("departamentos",empresas);
	}
	
	
	private void cargarListaDistritos(HttpServletRequest request,String provincia) {
		List<Distrito> empresas=ClienteWS.findDistritos(provincia);
		request.setAttribute("distritos",empresas);
	}
	
	
	private void cargarListaProvincias(HttpServletRequest request,String departamento) {
		List<Provincia> empresas=ClienteWS.findProvincias(departamento);
		request.setAttribute("provincias",empresas);
	}
	
 

}
